package com.zy.explore.license.interfaces.validator;

import com.zy.explore.license.infrastructure.exception.MessageCode;
import com.zy.explore.license.interfaces.assembler.CustomerLicenseInfoAssembler;
import com.zy.explore.license.interfaces.frm.CustomerLicenseInfoQueryFrm;
import com.zy.explore.license.interfaces.frm.CustomerLicenseInfoSaveFrm;
import com.zy.explore.license.interfaces.vo.CustomerLicenseInfoVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.Objects;

/**
 * description 表(customer_license_info)对应mybatis-plus的validator校验类
 *
 * @author 🇨🇳中国印🇨🇳
 * @date 2022年04月06日 10:13:39
 */
@Slf4j
public class CustomerLicenseInfoValidator {

    /**
     * 根据实际业务校验保存参数
     *
     * @param frm 待校验的frm对象
     */
    public static void validateFrm(CustomerLicenseInfoAssembler assembler, CustomerLicenseInfoSaveFrm frm) {
        String id = frm.getId();
        if (Objects.equals(id, null)) {
            // 新增数据校验
            validateFrmForInsert(assembler, frm);
        } else {
            // 更新数据校验
            validateFrmForUpdate(assembler, frm);
        }
    }

    /**
     * 方法说明：新增对象做校验
     *
     * @param assembler 转换器
     * @param frm       请求参数
     */
    private static void validateFrmForInsert(CustomerLicenseInfoAssembler assembler, CustomerLicenseInfoSaveFrm frm) {
        // 校验客户名称是否重复
        String customerName = frm.getCustomerName();
        if (StringUtils.isEmpty(customerName)) {
            throw MessageCode.BAD_REQUEST.toException();
        }
        CustomerLicenseInfoQueryFrm frm1 = CustomerLicenseInfoQueryFrm.builder()
                .customerName(customerName)
                .build();
        List<CustomerLicenseInfoVO> list = assembler.findList(frm1);
        if (!CollectionUtils.isEmpty(list)) {
            throw MessageCode.CUSTOMER_NAME_EXIST_ERROR.toException();
        }
    }

    /**
     * 方法说明：更新对象做校验
     *
     * @param assembler 转换器
     * @param frm       请求参数
     */
    private static void validateFrmForUpdate(CustomerLicenseInfoAssembler assembler, CustomerLicenseInfoSaveFrm frm) {
        // 校验客户名称是否重复
        String customerName = frm.getCustomerName();
        CustomerLicenseInfoQueryFrm frm1 = CustomerLicenseInfoQueryFrm.builder()
                .customerName(customerName)
                .build();
        List<CustomerLicenseInfoVO> list = assembler.findList(frm1);
        if (!CollectionUtils.isEmpty(list)) {
            list.forEach(vo -> {
                if (!Objects.equals(frm.getId(), vo.getId())) {
                    throw MessageCode.CUSTOMER_NAME_EXIST_ERROR.toException();
                }
            });
        }
    }

}

